/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package EtsAniTests

native function print{{ Type }}{{ count }}(
  {% for i in range(count) -%}
  arg{{ loop.index }}: {{ type }}{% if not loop.last %}, {% endif %}
  {%- endfor %}
): void

{% if type != "string" and arm32 == "false" -%}
@ani.unsafe.Direct
native function printDirect{{ Type }}{{ count }}(
  {% for i in range(count) -%}
  arg{{ loop.index }}: {{ type }}{% if not loop.last %}, {% endif %}
  {%- endfor %}
): void
{%- endif %}

@ani.unsafe.Quick
native function printQuick{{ Type }}{{ count }}(
  {% for i in range(count) -%}
  arg{{ loop.index }}: {{ type }}{% if not loop.last %}, {% endif %}
  {%- endfor %}
): void

function test{{ Type }}() {
    {% for i in range(count) -%}
    let a{{ loop.index }}: {{ type }} = {% if type == "double" -%}
        {{ loop.index }}.{{ loop.index }}
    {%- elif type == "boolean" -%}
        {%- if i % 2 == 0 -%}
            true
        {%- else -%}
            false
        {%- endif -%}
    {%- elif type == "string" -%}
        "{{ loop.index }}"
    {%- elif type == "float" -%}
        Double.toFloat({{ loop.index }}.{{ loop.index }})
    {%- else -%}
        {{ loop.index }}
    {%- endif %}
    {% endfor -%}
    print{{ Type }}{{ count }}(
        {%- for i in range(count) -%}
            a{{ loop.index }}{% if not loop.last %}, {% endif %}
        {%- endfor -%}
    )
    {% if type != "string" and arm32 == "false" -%}
    printDirect{{ Type }}{{ count }}(
        {%- for i in range(count) -%}
            a{{ loop.index }}{% if not loop.last %}, {% endif %}
        {%- endfor -%}
    )
    {%- endif %}
    printQuick{{ Type }}{{ count }}(
        {%- for i in range(count) -%}
            a{{ loop.index }}{% if not loop.last %}, {% endif %}
        {%- endfor -%}
    )
}

function main() {
    loadLibrary("types_{{ type }}_{{ count }}")
    test{{ Type }}()
}
